package com.majiang.majiang.service;

import com.majiang.majiang.domain.Dice;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Administrator
 * 掷骰子：掷两粒骰子
 */
@Setter
@Getter
@ToString
public class HurlDice {
    /**
     * 骰子的所有数据都存在里面(2粒)
     */
    private List<Dice> dices = new ArrayList<>();

    /**
     * 两粒骰子
     */
    private int dice1Num;
    private int dice2Num;

    /**
     * 方向(在哪个方位开牌)
     */
    private int direction;

    /**
     * 指定方向中的某个位置开始起牌
     */
    private int place;

    public HurlDice() throws InterruptedException{
        //创建骰子
        createDices();
        //打印点数
        printDices();
        //获取方向：在哪个方位开牌
        getDirection(4);
        //获取指定方向中的某个位置开始起牌
        getPlace();
    }

    /**
     * 创建两粒骰子
     * @throws InterruptedException 异常
     */
    private void createDices() throws InterruptedException{
        //实例化两粒骰子
        Dice dice1 = new Dice();
        Dice dice2 = new Dice();
        //随机产生两粒骰子的点数
        dice1Num = (int)(Math.random()*6+1);
        Thread.sleep(100);//睡一会，防止产生的两个随机数相同的几率过高
        dice2Num = (int)(Math.random()*6+1);
        //设置第一粒骰子
        dice1.setNum(dice1Num);
        //设置第二粒骰子
        dice2.setNum(dice2Num);
        //把数据都存放到List中
        dices.add(dice1);
        dices.add(dice2);
    }

    /**
     * 打印两粒骰子的点数
     */
    private void printDices(){
        System.out.println("【骰子的点数：" + dice1Num + " , " + dice2Num + "】");
    }

    /**
     * 获取方向：direction (在哪个方位开牌)
     */
    private int getDirection(int personNumber){
        //计算在哪个方向切牌
        direction = (dice1Num + dice2Num) % personNumber;
        switch (direction) {
            case 0:
                System.out.println("【在东方起牌】");
                break;
            case 1:
                System.out.println("【在南方起牌】");
                break;
            case 2:
                System.out.println("【在西方起牌】");
                break;
            case 3:
                System.out.println("【在北方起牌】");
                break;
        }
        return direction;
    }

    /**
     * 获取指定方向中的某个位置开始起牌
     */
    private int getPlace(){
        //计算在上述方向中的某个位置开始起牌
        place = dice1Num < dice2Num ? dice1Num : dice2Num;
        System.out.println("【起牌从距离该方向左边第" + place + "墩牌开始（一墩为两张牌）】");
        return place;
    }

    /**
     * 计算出从整副牌的什么位置开始起牌
     */
    public int getStartIndex(int totalMaJiangSize, int personNumber){
        //计算取牌的位置
        int startIndex = direction * (totalMaJiangSize / personNumber) + place * 2;
        System.out.println("【从整副牌的第" + startIndex + "张开始起牌】");
        return startIndex;
    }
}